package com.banesco.precargadepositos.interfaz.componentes;

import javax.microedition.lcdui.Font;
import net.rim.device.api.ui.FontFamily;
import net.rim.device.api.ui.Graphics;
import net.rim.device.api.system.Display;
import net.rim.device.api.ui.Color;
import net.rim.device.api.ui.component.LabelField;

public class LabelBanesco extends LabelField {

	private String _texto;
	private int _color = -1;
	private int _tamano = 0;
	private int _tamanofuente;
	private String fontFamily = "BBAlpha Sans";
	
	/**
	 * Constructor de la clase
	 * @param title Texto del label
	 * @param style estilo (focusable, no focusable)
	 * @param resaltado flag para indicar si se quiere el texto en negrita o no
	 */
	public LabelBanesco(String title, long style,
			 boolean resaltado) {
		super("", style);
		_texto = title;
		setPadding(8, 8, 0, 8);
		setearFont(resaltado);
	}
	
	/**
	 * Constructor de la clase
	 * @param style estilo del label (focusable no focusable)
	 * @param resaltado flag para indicar si el texto es resaltado o no
	 */
	public LabelBanesco(long style, boolean resaltado) {
		super("", style);
		setPadding(5, 5, 0, 5);
		setearFont(resaltado);
	}
	
	/**
	 * Constructor de la clase
	 * @param style estilo del label (focusable no focusable)
	 * @param resaltado flag para indicar si el texto es resaltado o no
	 * @param tamano se indica el tamano del contenedor para poder realizar
	 * salto de linea
	 */
	public LabelBanesco(long style, boolean resaltado, int tamano) {
		super("", style);
		setPadding(5, 5, 0, 5);
		_tamano = tamano;
		setearFont(resaltado);
	}
	
	/**
	 * Constructor de la clase
	 * @param style estilo del label (focusable no focusable)
	 * @param resaltado flag para indicar si el texto es resaltado o no
	 * @param tamano se indica el tamano del contenedor para poder realizar
	 * salto de linea
	 */
	public LabelBanesco(long style, boolean resaltado, int tamano, int tamanoFuente) {
		super("", style);
		setPadding(5, 5, 0, 5);
		_tamano = tamano;
		_tamanofuente = tamanoFuente;
		setearFont(resaltado);
	}

	protected void paint(net.rim.device.api.ui.Graphics graphic) {
		
		graphic.setColor(0x1D4175); //Azul Banesco
		graphic.setGlobalAlpha(255); // Sin transparencia las letras
		
		graphic.drawText(_texto, 0, 0);
		
		//setText(_texto);
        super.paint(graphic);
	}

	public int getPreferredHeight() {
		return getFont().getHeight() + 8;
	}

	public int getPreferredWidth() {
		int tamanoDisplay;
		
		if(_tamano == 0)
			tamanoDisplay = Display.getWidth()- 10;
		else
			tamanoDisplay = _tamano - 10;
		
		if(_texto!=null && _texto.length()!=0)
		{			
			int tamanoTexto = getFont().getAdvance(_texto);
			System.out.println(_texto);
			System.out.println(tamanoTexto);
			System.out.println(tamanoDisplay);
			
			if (tamanoTexto < tamanoDisplay)
				return tamanoTexto + 8;
		}
			return tamanoDisplay - 10;
	}

	protected void layout(int width, int height) {
		super.layout(getPreferredWidth(),height);
		setExtent(getPreferredWidth(), getHeight());
	}
	
	public int get_color() {
		return _color;
	}

	public void set_color(int _color) {
		this._color = _color;
	}

	/**
	 * Metodo que se encarga de colocar el texto Resaltado en Negrita
	 * Y Metodo que establece el tipo de fuente a utilizar
	 * Se define un unico tipo de fuente para toda la aplicacion
	 * @param resaltado boolean para indicar si se debe realizar resaltado
	 */
	private void setearFont(boolean resaltado)
	{
		try 
		{
			if(Display.getWidth() < 480)
				_tamanofuente = 17;
			else
				_tamanofuente = 26;
			
			int style = 0;
			if(resaltado)
				style = Font.STYLE_BOLD;
			else
				style = Font.STYLE_PLAIN;
			
			FontFamily fontFamily1;
			fontFamily1 = FontFamily.forName(fontFamily);
			this.setFont(fontFamily1.getFont(style,_tamanofuente));
		}
		catch (ClassNotFoundException e) {
			System.out.println("Error Label" + e.getMessage());
			e.printStackTrace();
		}
		
	}
	
	protected void drawFocus(Graphics g, boolean on){
		paint(g);
	}
	
}
